#pragma once

#include <stdint.h>
#include <stddef.h>

/**
 * @brief 从结构体成员指针获取结构体指针的宏（C++兼容版本）
 * @param ptr 成员指针
 * @param type 结构体类型
 * @param member 成员名称
 */
#define container_of(ptr, type, member) \
    ((type *)((char *)(ptr) - offsetof(type, member)))

/**
 * @brief FNV哈希函数
 * @param data 数据指针
 * @param len 数据长度
 * @return 哈希值
 */
static inline uint64_t str_hash(const uint8_t *data, size_t len) 
{
    uint32_t h = 0x811C9DC5;
    for (size_t i = 0; i < len; i++) 
    {
        h ^= data[i];
        h *= 0x01000193;
    }
    return h;
}